from django.shortcuts import render
from rest_framework.generics import ListAPIView
from rest_framework.response import Response
from rest_framework.views import APIView

from goods.models import SKU
from goods.serializers import HotSKUSeralizer
from utils.pagination import StandardResultsSetPagination

"""
伪
所谓的静态化 其实就是 生成一个html 让用户去访问html

我们的首页数据是 会变化的


1. 先查询数据
2. 将查询的数据渲染到模板中
3. 写入到指定的路径



"""
# Create your views here.

"""
获取商品列表 推荐信息


# 1.前段应该传递过来一个分类id,我们应该接收这个分类id
# 2.根据分类id查询商品数据,并对商品数据进行排序,并获取2个  [SKU,SKU,SKU]
# 3.我们需要对数据进行  序列化操作(将对象转换为字典)
# 4.返回数据

GET     goods/categories/cat_id/hotskus/



"""


# class HotSKUView(APIView):
#     def get(self, request, category_id):
#
#         # 1.前段应该传递过来一个分类id,我们应该接收这个分类id
#         # 2.根据分类id查询商品数据,并对商品数据进行排序,并获取2个  [SKU,SKU,SKU]
#         # 有分类,需要判断是否上架
#         #         #  where category_id=xxx and is_lanuched=True
#         #
#         #         # category 所对应的是分类,GoodsCategory,所以 当前的这个 category 属于对象 category=对象
#         #         # 如果是  赋值为 id数值,则应该采用 数据表中的字段名 category_id = 1
#         #         # category = 1 这相当于给一个对象赋值一个值 ,是错误的
#         skus = SKU.objects.filter(category_id=category_id, is_launched=True).order_by('-sales')[:2]
#
#         # 3.我们需要对数据进行  序列化操作(将对象转换为字典)
#         serializer=HotSKUSeralizer(skus,many=True)
#         # 4.返回数据
#         return Response(serializer.data)


class HotSKUView(ListAPIView):
    # queryset = SKU.objects.filter(category_id=category_id, is_launched=True).order_by('-sales')[:2]
    serializer_class = HotSKUSeralizer
    pagination_class = None
    def get_queryset(self):
        category_id = self.kwargs['category_id']

        return SKU.objects.filter(category_id=category_id, is_launched=True).order_by('-sales')[:2]


"""
列表页面数据获取


1. 先实现返回所有分类数据
2. 再实现排序
3. 最后实现 分页


GET     /goods/categories/(?P<category_id>\d+)/skus/?ordering=-price&page_size=2&page=3
"""
from rest_framework.filters import OrderingFilter
class SKUListAPIView(ListAPIView):
    # 排序
    filter_backends=[OrderingFilter]
    # 设置字段
    ordering_fields = ['create_time', 'price', 'sales']
    # 分页
    # pagination_class = StandardResultsSetPagination #用配置实现其他的视图也可以分页


    serializer_class = HotSKUSeralizer

    def get_queryset(self):

        category_id = self.kwargs['category_id']

        return SKU.objects.filter(category_id=category_id, is_launched=True)


"""

搜索的原理: 对数据进行分词处理, 把分词的数据进行一个 记录

举例:
    我是中国人
    我           第一条记录
    中国          第5条记录
    中国人         第10条记录


我们实现搜索的是的步骤:
一: 安装elasticsearch

二: 让 haystack 帮我们区实现搜索功能
    ① 配置信息
    ② 生成索引
    ③ 搜索


"""
from .serializers import SKUIndexSerializer
from drf_haystack.viewsets import HaystackViewSet

class SKUSearchViewSet(HaystackViewSet):
    """
    SKU搜索
    """
    index_models = [SKU]

    serializer_class = SKUIndexSerializer